<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Source</name>
    </assembly>
    <members>
        <member name="T:CommandRegistry`1">
            <summary>
            Default implementation of an <see cref="T:ICommandRegistry`1"/> that 
            invokes in-memory command handlers registered for a given command.
            <para>
            Handlers with <see cref="P:ICommandHandler.IsAsync"/> set to 
            <see langword="true"/> are invoked through the optional 
            async runner delegate passed to the constructor. If no async 
            runner is specified, the <see cref="M:System.Threading.ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback)"/>
            will be used automatically.
            </para>
            </summary>
            <typeparam name="TBaseCommand">The base type that all commands inherit from, 
            or a common interface for all. Can even be <see cref="T:System.Object"/> if no 
            common interface is needed.</typeparam>
            <nuget id="netfx-Patterns.DomainCommands.Core"/>
        </member>
        <member name="T:ICommandRegistry`1">
            <summary>
            Interface implemented by the component that executes 
            the registered command handler for a given command.
            </summary>
            <typeparam name="TBaseCommand">The base type that all commands inherit from, 
            or a common interface for all. Can even be <see cref="T:System.Object"/> if no 
            common interface is needed.</typeparam>
            <nuget id="netfx-Patterns.DomainCommands"/>
        </member>
        <member name="M:ICommandRegistry`1.Execute(`0,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Executes the specified command with a registered command handler.
            </summary>
            <param name="command">The command to execute.</param>
            <param name="headers">The headers associated with the command.</param>
            <remarks>
            Implementations should throw if the command cannot be mapped to 
            a registered handler, and also propagate any exceptions the handlers
            might throw.
            </remarks>
        </member>
        <member name="M:CommandRegistry`1.#ctor(System.Collections.Generic.IEnumerable{ICommandHandler})">
            <summary>
            Initializes a new instance of the <see cref="T:CommandRegistry`1"/> class with 
            the default async runner that enqueues work in the <see cref="T:System.Threading.ThreadPool"/>.
            </summary>
            <param name="commandHandlers">The command handlers.</param>
        </member>
        <member name="M:CommandRegistry`1.#ctor(IMessageStore{`0},System.Collections.Generic.IEnumerable{ICommandHandler})">
            <summary>
            Initializes a new instance of the <see cref="T:CommandRegistry`1"/> class with 
            the given command storage implementation and list of available command handlers.
            </summary>
            <param name="commandStore">The command store.</param>
            <param name="commandHandlers">The command handlers.</param>
        </member>
        <member name="M:CommandRegistry`1.#ctor(System.Collections.Generic.IEnumerable{ICommandHandler},System.Action{System.Action})">
            <summary>
            Initializes a new instance of the <see cref="T:CommandRegistry`1"/> class with
            the given list of available command handlers and an async runner for command 
            handlers that must be executed asynchronously.
            </summary>
            <param name="commandHandlers">The available command handlers.</param>
            <param name="asyncActionRunner">The async action runner to use to invoke command handlers
            that have <see cref="P:ICommandHandler.IsAsync"/> set to <see langword="true"/>.</param>
        </member>
        <member name="M:CommandRegistry`1.#ctor(IMessageStore{`0},System.Collections.Generic.IEnumerable{ICommandHandler},System.Action{System.Action})">
            <summary>
            Initializes a new instance of the <see cref="T:CommandRegistry`1"/> class with
            the given command storage implementation, list of available command handlers 
            and an async runner for command handlers that must be executed asynchronously.
            </summary>
            <param name="commandStore">The command store.</param>
            <param name="commandHandlers">The command handlers.</param>
            <param name="asyncActionRunner">The async action runner to use to invoke command handlers
            that have <see cref="P:ICommandHandler.IsAsync"/> set to <see langword="true"/>.</param>
        </member>
        <member name="M:CommandRegistry`1.#ctor(IMessageStore{`0},System.Func{System.Type,ICommandHandler})">
            <summary>
            Initializes a new instance of the <see cref="T:CommandRegistry`1"/> class with
            the given command storage implementation, list of available command handlers 
            and an async runner for command handlers that must be executed asynchronously.
            </summary>
            <param name="commandStore">The command store.</param>
            <param name="handlerResolver">The function that given a command type, can retrieve the associated command handler, or null if none is registered.</param>
        </member>
        <member name="M:CommandRegistry`1.#ctor(IMessageStore{`0},System.Func{System.Type,ICommandHandler},System.Action{System.Action})">
            <summary>
            Initializes a new instance of the <see cref="T:CommandRegistry`1"/> class with
            the given command storage implementation, list of available command handlers 
            and an async runner for command handlers that must be executed asynchronously.
            </summary>
            <param name="commandStore">The command store.</param>
            <param name="handlerResolver">The function that given a command type, can retrieve the associated command handler, or null if none is registered.</param>
            <param name="asyncActionRunner">The async action runner to use to invoke command handlers
            that have <see cref="P:ICommandHandler.IsAsync"/> set to <see langword="true"/>.</param>
        </member>
        <member name="M:CommandRegistry`1.Execute(`0,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Executes all handlers registered to receive the given command.
            </summary>
            <param name="command">The command payload.</param>
            <param name="headers">The headers for the command.</param>
            <exception cref="T:System.InvalidOperationException">No command handler is registered for the given command.</exception>
            <remarks>
            If the registered command handler throws an exception, the exception will be persisted as a header named 'Exception' 
            and the exception will be propagated to the caller, after saving the command to the underlying store, 
            which happens always once a registered handler is found.
            </remarks>
        </member>
        <member name="M:CommandRegistry`1.OnExecute``1(ICommandHandler{``0},``0,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Called when invoking the handler for a command with the given headers.
            </summary>
            <remarks>
            Derived classes can change the way handlers are invoked, optimize it, 
            or do pre/post processing right before/after the command is handled.
            </remarks>
        </member>
        <member name="T:CommandHandler`1">
            <summary>
            Base class for domain command handlers that subscribe to specific type of command.
            </summary>
            <typeparam name="TCommand">Type of command this handler can process.</typeparam>
            <nuget id="netfx-Patterns.DomainCommands.Core" />
        </member>
        <member name="T:ICommandHandler`1">
            <summary>
            Base interface for domain command handlers that subscribe to specific type of command.
            </summary>
            <typeparam name="TCommand">Type of command this handler can process.</typeparam>
            <nuget id="netfx-Patterns.DomainCommands.Core" />
        </member>
        <member name="T:ICommandHandler">
            <summary>
            Base interface part of the infrastructure. Concrete 
            handlers should inherit <see cref="T:CommandHandler`1"/> or 
            implement <see cref="T:ICommandHandler`1"/> instead.
            </summary>
            <nuget id="netfx-Patterns.DomainCommands.Core"/>
        </member>
        <member name="P:ICommandHandler.IsAsync">
            <summary>
            Gets a value indicating whether this handler should be executed asynchronously.
            </summary>
        </member>
        <member name="M:ICommandHandler`1.Handle(`0,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Handles the specified command.
            </summary>
            <param name="command">The command to handle.</param>
            <param name="headers">The headers associated with the command.</param>
        </member>
        <member name="M:CommandHandler`1.Handle(`0,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Handles the specified command.
            </summary>
            <param name="command">The command to handle.</param>
            <param name="headers">The headers associated with the command.</param>
        </member>
        <member name="P:CommandHandler`1.IsAsync">
            <summary>
            Gets a value indicating whether this handler should be executed asynchronously.
            </summary>
        </member>
        <member name="T:CommandRegistryExtensions">
            <summary>
            Adds usability overloads to <see cref="T:ICommandRegistry`1"/>.
            </summary>
        </member>
        <member name="M:CommandRegistryExtensions.Execute``1(ICommandRegistry{``0},``0)">
            <summary>
            Executes the specified command with empty headers.
            </summary>
            <typeparam name="TBaseCommand">The base type that all commands inherit from, 
            or a common interface for all. Can even be <see cref="T:System.Object"/> if no 
            common interface is needed.</typeparam>
            <param name="registry">The command registry to execute the command on.</param>
            <param name="command">The command to execute.</param>
        </member>
        <member name="M:CommandRegistryExtensions.Execute``1(ICommandRegistry{``0},System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Executes the specified command.
            </summary>
            <typeparam name="TBaseCommand">The base type that all commands inherit from, 
            or a common interface for all. Can even be <see cref="T:System.Object"/> if no 
            common interface is needed.</typeparam>
            <param name="registry">The command registry to execute the command on.</param>
            <param name="commands">The commands to execute.</param>
        </member>
        <member name="M:CommandRegistryExtensions.Execute``1(ICommandRegistry{``0},System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Executes the specified command.
            </summary>
            <typeparam name="TBaseCommand">The base type that all commands inherit from, 
            or a common interface for all. Can even be <see cref="T:System.Object"/> if no 
            common interface is needed.</typeparam>
            <param name="registry">The command registry to execute the command on.</param>
            <param name="commands">The commands to execute.</param>
            <param name="headers">The headers for the commands.</param>
        </member>
        <member name="T:IMessageStore`1">
            <summary>
            Interface implemented by a message stores.
            </summary>
            <typeparam name="TBaseMessage">The common base type or interface implemented by message payloads.</typeparam>
            <nuget id="netfx-Patterns.MessageStore"/>
        </member>
        <member name="M:IMessageStore`1.Save(`0,System.Collections.Generic.IDictionary{System.String,System.Object})">
            <summary>
            Persists the message and headers.
            </summary>
            <param name="message">The message to persist.</param>
            <param name="headers">The headers associated with the message.</param>
        </member>
        <member name="M:IMessageStore`1.Query(MessageStoreQueryCriteria)">
            <summary>
            Queries the store for messages that match the given criteria.
            </summary>
            <remarks>
            Store implementations are advised to provide full support for the 
            specified criteria, but aren't required to.
            <para>
            The <see cref="M:MessageStoreQueryExtension.Query``1(IMessageStore{``0})"/> extension method  
            can be used with any message store implementation, and provides a fluent 
            API to build the criteria object
            </para>
            </remarks>
        </member>
        <member name="T:MessageStoreQueryCriteria">
            <summary>
            Represents the filter criteria for a message store query.
            </summary>
            <nuget id="netfx-Patterns.MessageStore"/>
        </member>
        <member name="M:MessageStoreQueryCriteria.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:MessageStoreQueryCriteria"/> class.
            </summary>
        </member>
        <member name="P:MessageStoreQueryCriteria.MessageTypes">
            <summary>
            List of message type filters. All types added are OR'ed with the 
            others (i.e. <c>MessageType == InvalidServerAddress OR MessageType == ServerMemoryLow</c>).
            </summary>
        </member>
        <member name="P:MessageStoreQueryCriteria.Since">
            <summary>
            Filters messages that happened after the given starting date.
            </summary>
        </member>
        <member name="P:MessageStoreQueryCriteria.Until">
            <summary>
            Filters messages that happened before the given ending date.
            </summary>
        </member>
        <member name="P:MessageStoreQueryCriteria.IsExclusiveRange">
            <summary>
            If set to <see langword="true"/>, <see cref="P:MessageStoreQueryCriteria.Since"/> and <see cref="P:MessageStoreQueryCriteria.Until"/> should 
            be considered as exclusive ranges (excludes values with a matching date). 
            Defaults to <see langword="false"/>, meaning that ranges are inclusive by default.
            </summary>
        </member>
        <member name="T:MessageStoreQueryExtension">
            <summary>
            Provides the entry point <see cref="M:MessageStoreQueryExtension.Query``1(IMessageStore{``0})"/> extension method 
            for an <see cref="T:IMessageStore`1"/> for a fluent API 
            that makes building the message query criteria easier.
            </summary>
            <nuget id="netfx-Patterns.MessageStore"/>
        </member>
        <member name="M:MessageStoreQueryExtension.Query``1(IMessageStore{``0})">
            <summary>
            Allows building a query against the message store 
            using a fluent API and automatically executing 
            it to messages that match built criteria upon 
            query enumeration or explicit execution.
            </summary>
            <typeparam name="TBaseMessage">The base type or interface implemented by log entries in the system.</typeparam>
            <param name="store">The audit log store.</param>
        </member>
        <member name="T:MessageStoreQueryExtension.IQuery`1">
            <summary>
            Provides a fluent API to filter messages from a message store. 
            </summary>
            <remarks>
            This interface is returned from the <see cref="M:MessageStoreQueryExtension.Query``1(IMessageStore{``0})"/> 
            extension method for <see cref="T:IMessageStore`1"/>.
            </remarks>
            <typeparam name="TBaseMessage">The base type or interface implemented by events in the system.</typeparam>
            <nuget id="netfx-Patterns.MessageStore"/>
        </member>
        <member name="M:MessageStoreQueryExtension.IQuery`1.Execute">
            <summary>
            Executes the query built using the fluent API 
            against the underlying store.
            </summary>
        </member>
        <member name="M:MessageStoreQueryExtension.IQuery`1.OfType``1">
            <summary>
            Includes messages in the result that are assignable to the given type. Can be called 
            multiple times and will filter for any of the specified types (OR operator).
            </summary>
            <typeparam name="TMessage">The type of messages to include.</typeparam>
        </member>
        <member name="M:MessageStoreQueryExtension.IQuery`1.Since(System.DateTime)">
            <summary>
            Includes messages that happened after the given starting date.
            </summary>
            <param name="when">The starting date to filter by.</param>
            <remarks>
            By default, includes messages with the given date, unless the 
            <see cref="M:MessageStoreQueryExtension.IQuery`1.ExclusiveRange"/> is called to make the range exclusive.
            </remarks>
        </member>
        <member name="M:MessageStoreQueryExtension.IQuery`1.Until(System.DateTime)">
            <summary>
            Includes events that happened before the given ending date.
            </summary>
            <param name="when">The ending date to filter by.</param>
            <remarks>
            By default, includes messages with the given date, unless the 
            <see cref="M:MessageStoreQueryExtension.IQuery`1.ExclusiveRange"/> is called to make the range exclusive.
            </remarks>
        </member>
        <member name="M:MessageStoreQueryExtension.IQuery`1.ExclusiveRange">
            <summary>
            Makes the configured <see cref="M:MessageStoreQueryExtension.IQuery`1.Since(System.DateTime)"/> and/or <see cref="M:MessageStoreQueryExtension.IQuery`1.Until(System.DateTime)"/> dates 
            exclusive, changing the default behavior which is to be inclusive.
            </summary>
        </member>
        <member name="T:DictionaryFind">
            <summary>
            Finds a value by key in the dictionary, or returns the default value for 
            TValue. Just like Linq FirstOrDefault().
            </summary>
            <nuget id="netfx-System.Collections.Generic.DictionaryFind" />
        </member>
        <member name="M:DictionaryFind.Find``2(System.Collections.Generic.IDictionary{``0,``1},``0)">
            <summary>
            Finds a value by key in the dictionary, or returns the default value for 
            TValue. Just like Linq FirstOrDefault().
            </summary>
            <param name="dictionary" this="true">The object this extension method applies to.</param>
            <param name="key">The key of the value to find.</param>
        </member>
        <member name="T:DictionaryGetOrAdd">
            <summary>
            Adds a key/value pair to the <see cref="T:System.Collections.Generic.IDictionary`2"/> if the key does not already exist. 
            </summary>
        </member>
        <member name="M:DictionaryGetOrAdd.GetOrAdd``2(System.Collections.Generic.IDictionary{``0,``1},``0,System.Func{``0,``1})">
            <summary>
            Adds a key/value pair to the <see cref="T:System.Collections.Generic.IDictionary`2"/> if the key does not already exist. 
            No locking occurs, so the value may be calculated twice on concurrent scenarios. If you need 
            concurrency assurances, use a concurrent dictionary instead.
            </summary>
            <nuget id="netfx-System.Collections.Generic.DictionaryGetOrAdd"/>
            <param name="dictionary" this="true">The dictionary where the key/value pair will be added</param>
            <param name="key">The key to be added to the dictionary</param>
            <param name="valueFactory">The value factory</param>
        </member>
        <member name="T:Guard">
            <summary>
            Common guard class for argument validation.
            </summary>
        </member>
        <member name="M:Guard.NotNull``1(System.Linq.Expressions.Expression{System.Func{``0}},``0)">
            <summary>
            Ensures the given <paramref name="value"/> is not null.
            Throws <see cref="T:System.ArgumentNullException"/> otherwise.
            </summary>
        </member>
        <member name="M:Guard.NotNullOrEmpty(System.Linq.Expressions.Expression{System.Func{System.String}},System.String)">
            <summary>
            Ensures the given string <paramref name="value"/> is not null or empty.
            Throws <see cref="T:System.ArgumentNullException"/> in the first case, or 
            <see cref="T:System.ArgumentException"/> in the latter.
            </summary>
        </member>
    </members>
</doc>
